#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include "header.h"



void gameplay(int n)
{
    /*************Déclaration**************/

    int i,j,k,x=0 , temps0,  temps  , score ;
    int tab[20]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//Contient le nombre de bâton retiré par joueur
    SDL_Surface *baton,*noir,*texte,*texte2,*texte1,*retour,*texte3 , *messages_perdant, *messages_gagnant ,*scoreTTF;
    SDL_Rect T[20]; //contient les positions des 20 batons
    int t_occ[20]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//contient le nombre de click sur chaque bâton
    TTF_Font *police = NULL;
    SDL_Surface *ecran1, *imageSupport,*cache , *cache_alerte;
    SDL_Event event;
    SDL_Rect desti,desti1,position,position1,position3,b_retour , position_compteur;
    int done =1;
    char char_score[20];
    /**************************************/



    /*************Initialisation**************/

     atexit(SDL_Quit);
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf( "Echec d'initialisation de SDL.\n");

    }
    else
    {
        printf("SDL est initialisé avec succès.\n");
    }


    ecran1 = SDL_SetVideoMode(960, 680, 32, SDL_SWSURFACE | SDL_FULLSCREEN);
    if ( ecran1 == NULL )
    {
        printf("Echec de creation de la fenetre. \n");
    }
    else printf("SDL initialiser avec succes");

    TTF_Init();

    if(TTF_Init() < 0 )
    {
        printf("Impossible d'initialiser SDL_ttf. \n");

    }


    imageSupport = SDL_LoadBMP("data/img/support1.bmp");

    if ( imageSupport == NULL )
    {
        printf("Echec de chargement du fichier image.bmp");

    }


    retour = SDL_LoadBMP("data/img/retour.bmp");


    if ( retour == NULL )

    {
        printf("Echec de chargement du fichier retour.bmp");
    }



    police = TTF_OpenFont("C:\Windows\Fonts.ALGER.ttf", 40);

    if(police==NULL)

    {
        printf("Erreur de création de la police : C:\Windows\Fonts.ALGER.ttf \n");

    }



    cache = SDL_LoadBMP("data/img/cache.bmp");

    if ( cache == NULL )
    {
        printf("Echec de chargement du fichier image.bmp.\n");

    }


    cache_alerte = SDL_LoadBMP("data/img/cache_alert.bmp");
    if ( cache_alerte == NULL )
    {
        printf("Echec de chargement du fichier cache_alert.bmp.\n");

    }




    SDL_Color TextColor;
    TextColor.r = 255;
    TextColor.g = 255;
    TextColor.b = 255;


    texte = TTF_RenderText_Blended(police, "Maitre jouez", TextColor);
    texte1 = TTF_RenderText_Blended(police, "passer la main", TextColor);
    texte2 = TTF_RenderText_Blended(police, "Candidat jouez", TextColor);
    texte3 = TTF_RenderText_Blended(police , "Aucun baton  selectionne !!",TextColor);
    messages_perdant = TTF_RenderText_Blended(police, "condidat vous avez perdu emmenez le  :/", TextColor);
    messages_gagnant = TTF_RenderText_Blended(police, "Félicitation !!! condidat vous nous avez sauvé:D", TextColor);

//position support

    desti.x = 125;
    desti.y = 200;
    desti.w = imageSupport->w;
    desti.h = imageSupport->h;


//postion text joueur


    position.x = 100;
    position.y = 100;
    position.w= texte->w;
    position.h = texte->h;


//position "passer la main"

    position1.x = 340;
    position1.y = 500;
    position1.w= texte1->w;
    position1.h = texte1->h;

//position de cache pour "le maitre joue" et "le candidats joue"

    position3.x = 100;
    position3.y = 100;
    position3.w= cache->w;
    position3.h = cache->h;

//coordonnées du bouton retour

    b_retour.x = 20;
    b_retour.y = 494.75;
    b_retour.w = 144;
    b_retour.h = 77.21;
//position du compteur

position_compteur.x = 400;
position_compteur.y = 20;
position_compteur.w = 100;
position_compteur.h = 30;

    /**************************************/


    //Transparence de la bouton retour
    SDL_SetColorKey(retour, SDL_SRCCOLORKEY, SDL_MapRGB(retour->format, 255, 255, 255));

    SDL_BlitSurface(imageSupport, NULL, ecran1, &desti);
    SDL_BlitSurface(texte, NULL, ecran1, &position);


    baton = SDL_LoadBMP("data/img/batton.bmp");
    if ( baton == NULL )
    {
        printf("Echec de chargement du fichier : data/img/batton.bmp.\n");
    }

 //position du 1ere bâton

    desti1.x=255;
    desti1.y=275;
    desti1.w = baton->w;
    desti1.h = baton->h;



/* Affichage de tout les bâtons */

    T[0].x=245; //Affectation du position du premier baton
    for (j=0; j<n; j++)
    {
        SDL_BlitSurface(baton, NULL, ecran1, &desti1);
        SDL_BlitSurface(retour, NULL, ecran1, &b_retour);
        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
        SDL_EnableKeyRepeat(10,10);
        T[j].x=desti1.x;
        desti1.x+=20;

    }
/* Fin d'Affichage */






    temps0 = SDL_GetTicks()/1000 ;//on dévise par 1000 juste pour obtenir le temps de secondes
    temps = SDL_GetTicks()/1000 ;
    score = 0 ;
    while(done)
    {
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {

            case SDL_QUIT:
                done = 0;
                break;



            case SDL_KEYDOWN:

                if (event.key.keysym.sym == SDLK_ESCAPE)
                {
                    done = 0;
                }
                else if (event.key.keysym.sym == SDLK_RETURN)
                {
                    if (tab[x] != 0) //Vérifier si le joueur a pris entre 1 et 3 batons
                    {

                    x++;
                    SDL_BlitSurface(cache, NULL, ecran1, &position1);
                    SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                    SDL_EnableKeyRepeat(10,10);

                    if((x%2)==0) //Si x est pair alors c'est le maître qui joue
                    {
                    /*On affiche "Le maitre joue"*/
                        SDL_BlitSurface(cache, NULL, ecran1, &position3);
                        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                        SDL_BlitSurface(cache_alerte, NULL, ecran1, &position1);
                        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                        SDL_BlitSurface(texte, NULL, ecran1, &position);
                        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                        SDL_EnableKeyRepeat(10,10);
                    }
                    else
                    {
                    /*On affiche  "la Candidat joue"  */
                        SDL_BlitSurface(cache, NULL, ecran1, &position);
                        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                        SDL_BlitSurface(cache_alerte, NULL, ecran1, &position1);
                        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                        SDL_BlitSurface(texte2, NULL, ecran1, &position);
                        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                        SDL_EnableKeyRepeat(10,10);
                    }
                    }
                    else
                    {
                    /*!!!!!!!!!!!!!!Message d'alerte : Aucune bâtons n'est séléctionnée!!!!!!!!!!*/
                    SDL_BlitSurface(cache, NULL, ecran1, &position1);
                    SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                    SDL_BlitSurface(texte3, NULL, ecran1, &position1);
                    SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                    SDL_EnableKeyRepeat(10,10);
                    }

                }
                break;



            //Revenir au menu principale
            case SDL_MOUSEBUTTONUP:
                if (event.button.button == SDL_BUTTON_LEFT && b_retour.x < event.button.x && event.button.x < b_retour.x + 144 &&
                        b_retour.y < event.button.y && event.button.y < b_retour.y + 77.21)
                    {
                        menu();
                    }
            break;




            case SDL_MOUSEBUTTONDOWN:

            {
                if (tab[x]<3)


                {
                    for(k=0; k<n; k++)

                    {
                        if (event.button.button == SDL_BUTTON_LEFT && T[k].x < event.button.x && event.button.x < T[k].x + baton->w &&
                                desti1.y < event.button.y && event.button.y < desti1.y + baton->h && t_occ[k]==0)
                        {
                            noir = SDL_LoadBMP("data/img/noir.bmp");
                            if ( noir == NULL )
                            {
                                    printf("Echec de chargement du fichier data/img/noir.bmp !!!\n");
                            }
                           /*****Position du baton noir*****/
                            desti1.x=T[k].x;
                            desti1.y=275;
                            desti1.w = noir->w;
                            desti1.h = noir->h;
                           /*********************************/
                            SDL_BlitSurface(noir, NULL, ecran1, &desti1);
                            SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                            SDL_EnableKeyRepeat(10,10);
                            tab[x]++;
                            t_occ[k]=1;
                        }
                    }

                }
                else
                {
                    SDL_BlitSurface(texte1, NULL, ecran1, &position1);
                    SDL_UpdateRect(ecran1, 0, 0, 0, 0);
                    SDL_EnableKeyRepeat(10,10);

                }

            }
            break;

            }
        }
    temps = SDL_GetTicks()/1000;

    /*Calcule du score*/
    score = temps - temps0 ;
    sprintf(char_score , "%d" , score);
    scoreTTF = TTF_RenderText_Blended(police , char_score ,TextColor);
    SDL_BlitSurface(cache, NULL, ecran1, &position_compteur);
    SDL_UpdateRect(ecran1, 0, 0, 0, 0);
    SDL_BlitSurface(scoreTTF, NULL, ecran1, &position_compteur);
    SDL_UpdateRect(ecran1, 0, 0, 0, 0);
    SDL_EnableKeyRepeat(10,10);

    //Calcule de nombre des bâtons retirés
    for (i=0 ; i<20 ; i++)
    {
        n -= tab[i];
    }
    if (n == 1 )
    {
    done = 0 ;
    if (x%2 == 0)
    {
        SDL_BlitSurface (messages_perdant , NULL , ecran1 , &position1);//a préciser la position d'affichage
        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
        SDL_EnableKeyRepeat(10,10);
        //Insérer un bouton REJOUER
    }
    else
    {
        SDL_BlitSurface (messages_gagnant , NULL , ecran1 , &position1);//a préciser la position d'affichage
        SDL_UpdateRect(ecran1, 0, 0, 0, 0);
        SDL_EnableKeyRepeat(10,10);
        //Insérer un bouton REJOUER

   }

    }
    }


    SDL_Quit();
}


